
Security News
Open Source Maintainers Feeling the Weight of the EU’s Cyber Resilience Act
The EU Cyber Resilience Act is prompting compliance requests that open source maintainers may not be obligated or equipped to handle.
Universal JavaScript library for clamping HTML text elements.
To get a hands-on experience try the Interactive Demo.
# install with npm
npm install js-snip
# or with yarn
yarn add js-snip
export interface Snip {
(element: HTMLElement, options?: Partial<Readonly<SnipOptions>>, onSnipped?: OnSnipped): void
}
export interface Unsnip {
(element: HTMLElement): void
}
import { snip, unsnip } from 'js-snip'
// minimal example
snip(element)
// with options
snip(element, { lines: 3 })
// with several options
snip(element, { lines: 3, mode: 'js', midWord: false })
// with options and callback
snip(element, { lines: 3 }, (newState, oldState) => {
// ...
})
// unsnipping the element
unsnip(element)
export interface SnipOptions {
mode: 'css' | 'js'
lines: number
ellipsis: string
midWord: boolean
textContent: string
}
// your options will get merged with the defaults
export const defaultOptions: Readonly<SnipOptions> = {
mode: 'css',
lines: 3,
ellipsis: '.\u200A.\u200A.',
midWord: true,
textContent: null,
}
Each snipped element has an internal state:
export interface SnipState {
hasEllipsis: boolean
}
Callback will be executed immediately after the initial snipping and after each subsequent snipping (after resize etc.). It allows you to react to state changes:
export interface OnSnipped {
(newState: Readonly<SnipState>, oldState: Readonly<SnipState>): void
}
-webkit-line-clamp
.textContent
in a loop until the content fits into the given number of lines.Note: CSS mode is faster (preferred), but does not work in older browsers / in all situations (f.e. does not work in IE11, when you need the text to flow around a floated element, or when you want a custom ellipsis).
For the library to be able to determine the number of lines / hide the text-overflow properly, the height of the element should be the same as the height of the text. Be wary of any CSS steps that will affect the height of the element. Some of the common examples:
align-items
defaults to stretch
)flex-grow
in the column flex layout.Note: You can still use the directive with flexbox, just make sure to change the default align-items
/ align-self
value to flex-start
or whatever fits your case.
IE11 does not support -webkit-line-clamp
(falls back to the JS mode), and the ResizeObserver API
. This API needs to be polyfilled if you want to re-snip the elements on the resize in IE11 (they would still get snipped when inserted / on data change without the polyfill). Recommended: @juggle/resize-observer
import { ResizeObserver as Polyfill } from '@juggle/resize-observer';
window.ResizeObserver = window.ResizeObserver || Polyfill;
All changes are documented in the change log.
1.2.0
:package: textContent
snipping option added
FAQs
Universal JavaScript library for clamping HTML text elements.
The npm package js-snip receives a total of 3,422 weekly downloads. As such, js-snip popularity was classified as popular.
We found that js-snip demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The EU Cyber Resilience Act is prompting compliance requests that open source maintainers may not be obligated or equipped to handle.
Security News
Crates.io adds Trusted Publishing support, enabling secure GitHub Actions-based crate releases without long-lived API tokens.
Research
/Security News
Undocumented protestware found in 28 npm packages disrupts UI for Russian-language users visiting Russian and Belarusian domains.